Puiu Anton, 343C3.

Tema a fost dezvoltata pe sistemul de operare Linux.

Pentru fiecare comanda executata de catre client a fost definita o pereche de
structuri de date (request, response). 

In situatia in care structura de date definita pentru o comanda este similara
sau identica pentru o alta comanda, se pastreaza o singura structura de date
care este utilizata pentru mai multe comenzi. Spre exemplu, pentru structura
'request' a comenzilor DELETE, READ si GET_STAT, se utilizeaza aceeasi structura
de date.

Comanda executata de catre client este definita prin tipul de date enumerare
'command_type'.

Interfata expune o singura functie care poate fi apelata de catre client, mai
exact 'rpc_call'. Comanda executata de catre client este specificata prin
intermediul parametrului 'type' de tipul 'command_type'. De asemenea, server-ul
intoarce tipul comenzii executate de catre client, sau 'BAD_CMD' in caz de eroare.

Pentru a reprezenta structurile 'request' si 'response', se utilizeaza uniuni,
intrucat trebuie inglobate structurile de date pentru fiecare grup de comenzi.

Client:
Pentru a executa o comanda, se executa urmatorii pasi:
    1. Se citeste din fisier sau de la tastatura o linie
    2. Se interpreteaza linia citita
    3. Se construieste cererea
    4. Se executa comanda
    5. Se interpreteaza raspunsul

Pentru construirea cererii si interpretarea raspunsului sunt definite doua clase
abstracte, care reprezinta clasele de baza pentru fiecare tip de cerere, respectiv
raspuns.

Ierarhia de clase se poate observa din structura de directoare prezenta. Aceasta
a fost creata cu scopul reutilizarii codului.

Server:
Pentru a executa o comanda, se executa urmatorii pasi:
    1. Se interpreteaza cererea
    2. Se executa cererea
    3. Se construieste raspunsul

Cei trei pasi mentionati anterior se realizeaza in cadrul unui singur obiect,
mai exact o instanta a clasei 'command', intrucat separatia realizata in cazul
clientului nu este necesara.

Compilarea temei necesita instalat utilitarul CMake si biblioteca rpcbind,
aceasta realizandu-se prin lansarea in executie a script-ului 'compile.sh'.

Pentru rularea testelor este pus la dispozitie script-ul 'run_tests.sh'.
